/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.lostreseditores.logica;

import com.lostreseditores.modelo.Estudiante;
import com.lostreseditores.modelo.Examenpreguntas;
import com.lostreseditores.modelo.Premarcado;
import com.lostreseditores.modelo.Presentaexamen;
import com.lostreseditores.modelo.PresentaexamenPK;
import com.lostreseditores.modelo.Respuestasexamen;
import com.lostreseditores.modelo.RespuestasexamenPK;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author DILOVE
 */
@Stateless
public class CalificacionLogica implements CalificacionLogicaLocal {
    @EJB
    private EstudianteLogicaLocal estudianteLogica;
    
    @EJB
    private ExamenPreguntaLogicaLocal examenPreguntaLogica;
    
    @EJB
    private RespuestasExamenLogicaLocal respuestaExamenLogica;
    
    @EJB
    private PresentaExamenLogicaLocal presentaExamenLogica;
    
    @Override
    public void leerCalificacion(String archivo, Premarcado premarcado) throws Exception {
        BufferedReader fd = null;
        String linea = "";
        String[] datos;
        char[] preguntas;
        Integer documento;
        int sesion =0;
        int cantidadNR=0;
        try {
            fd = new BufferedReader (new FileReader(archivo));
        }
        catch (FileNotFoundException e) {
            System.out.println ("No pude abrir el archivo");
            throw new Exception("No pude abrir el archivo");
        }
        try {
            while ((linea = fd.readLine ()) != null)
            {
                datos = linea.split(" ");
                documento = Integer.parseInt(datos[0].trim());
                Estudiante e = estudianteLogica.consultarPorId(documento);
                if(e==null){
                    cantidadNR++;
                }else{
                    PresentaexamenPK pepk = new PresentaexamenPK(e.getIdEstudiante(), premarcado.getPremarcadoPK().getIdExamen());
                    System.out.println("Estudiante "+e.getIdEstudiante()+" examen "+premarcado.getPremarcadoPK().getIdExamen());
                    Presentaexamen presenta = presentaExamenLogica.consultarPorId(pepk);
                    if(presenta==null){
                        System.out.println("Lo va a registrar??");
                        Presentaexamen nuevo = new Presentaexamen(pepk, fecha(), "CITADO");
                        presentaExamenLogica.registrar(nuevo);
                    }
                }
            }
            fd = new BufferedReader (new FileReader(archivo));
            if(cantidadNR==0){
                System.out.println("Es mayor a 0"); 
                while ((linea = fd.readLine ()) != null)
                {
                    datos = linea.split(" ");
                    documento = Integer.parseInt(datos[0].trim());
                    preguntas = datos[2].trim().toString().toCharArray();
                    sesion = Integer.parseInt(datos[1]);
                    System.out.println("Examen "+premarcado.getExamen());
                    System.out.println("Sesion "+sesion);
                    List<Examenpreguntas> examenpreguntas = examenPreguntaLogica.consultarOrderPreguntas(premarcado.getExamen().getIdExamen(), sesion);
                    for (int i = 0; i < examenpreguntas.size(); i++) {
                        System.out.println("Respuesta"+preguntas[i]);
                        RespuestasexamenPK respuestasexamenPK = new RespuestasexamenPK(documento, premarcado.getExamen().getIdExamen(), examenpreguntas.get(i).getPregunta().getIdPregunta());        
                        Respuestasexamen respuestasexamen = new Respuestasexamen(respuestasexamenPK, preguntas[i]+"");
                        respuestaExamenLogica.registrar(respuestasexamen);
                    }
                    
                }
            }
            fd.close ();
        }
        catch (IOException e) {
            System.out.println ("Error al leer");
            throw new Exception("Error al leer");
        }
        if(cantidadNR>0){
            throw new Exception("Hay estudiantes Premarcados en el Examen, que no están registrados. Por favor registrelos antes de continuar");
        }
    }
    
    public Date fecha(){
        java.util.Date fecha = new Date();
        return fecha;
    }
        
}
